/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.siseventos.managed;

import br.siseventos.model.TbEvento;
import br.siseventos.service.EventoService;
import br.siseventos.util.RelatorioHelper;
import br.siseventos.view.util.MessageHelper;
import java.io.*;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.event.ActionEvent;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.util.JRLoader;
import org.apache.log4j.Logger;

/**
 *
 * @author marcosnatanpacheco
 */
@ManagedBean(name = "relParticipantesBean")
@RequestScoped
public class RelatorioParticipantesBean extends BaseBean {
    // Logger

    Logger log = Logger.getLogger(RelatorioParticipantesBean.class);
    // Campos
    private TbEvento eventoSelecionado;
    private List<TbEvento> listaEventos;
    private EventoService eventoService;

    // Construtor
    public RelatorioParticipantesBean() {
        // Inicializando a Service de Eventos
        eventoService = new EventoService();

        try {

            // Buscando a lista de eventos
            listaEventos = eventoService.consultarTodos();


        } catch (Exception ex) {
            MessageHelper.showGlobalMessage("Ocorreu um erro!", FacesMessage.SEVERITY_ERROR);
        }
    }
    // Actions e Listeners

    public void gerarRelatorio(ActionEvent e) throws SQLException, JRException, IOException, Exception {

        FacesContext contexto = FacesContext.getCurrentInstance();
        String caminho = RelatorioHelper.pathRelatorio(contexto,
                "siseventos_rel_participantes");
        Map<String, Object> parametros = new HashMap<String, Object>();
        Connection conexao = RelatorioHelper.getConexao();
        parametros.put("ID_EVENTO", eventoSelecionado.getIdtEvento());
        try {
            JasperReport rep1 = (JasperReport) JRLoader.loadObject(new FileInputStream(caminho));
            JasperPrint repCom = JasperFillManager.fillReport(rep1, parametros, conexao);
            RelatorioHelper.downloadRelatorio("Relatorio_Presencas", repCom, contexto);
            log.warn("Relatório impresso ok!");
        } catch (Exception ex) {
            // Mostrando mensagem de erro
            MessageHelper.showGlobalMessage("Erro ao gerar relatório!", FacesMessage.SEVERITY_ERROR);
        }

    }
    // Util

    public Converter getConversor() {
        return new Converter() {

            @Override
            public Object getAsObject(FacesContext context, UIComponent component, String value) {
                // Transformar string em objeto
                TbEvento e = null;
                try {
                    e = eventoService.consultar(Integer.parseInt(value));
                } catch (Exception ex) {
                }
                return e;
            }

            @Override
            public String getAsString(FacesContext context, UIComponent component, Object value) {
                // Transformar objeto em string
                String r = null;
                if (value instanceof TbEvento) {
                    r = ((TbEvento) value).getIdtEvento().toString();
                }
                return r;
            }
        };

    }
// Getters e Setters

    public TbEvento getEventoSelecionado() {
        return eventoSelecionado;
    }

    public void setEventoSelecionado(TbEvento eventoSelecionado) {
        this.eventoSelecionado = eventoSelecionado;
    }

    public List<TbEvento> getListaEventos() {
        return listaEventos;
    }

    public void setListaEventos(List<TbEvento> listaEventos) {
        this.listaEventos = listaEventos;
    }
}
